package com.xgure.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xgure.constant.MessageConstant;
import com.xgure.dto.ProductAddDTO;
import com.xgure.dto.ProductQueryDTO;
import com.xgure.dto.ProductUpdateDTO;
import com.xgure.excption.DataNotEnoughException;
import com.xgure.mapper.ProductMapper;
import com.xgure.pojo.Product;
import com.xgure.result.PageResult;
import com.xgure.service.ProductService;
import com.xgure.utils.BaseContextUtil;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Resource
    private ProductMapper productMapper;

    /**
     * 添加新的商品
     *
     */
    @Override
    public void add(ProductAddDTO productAddDTO) {
        // 判断数据是否合法
        if (productAddDTO.getProductName() == null || productAddDTO.getProductName().trim().isEmpty()) {
            throw new DataNotEnoughException(MessageConstant.NEED_PRODUCT_NAME);
        }
        if (productAddDTO.getUnitPrice() == null) {
            throw new DataNotEnoughException(MessageConstant.NEED_PRODUCT_UNIT_PRICE);
        }
        // 封装商品数据
        Product product = new Product();
        BeanUtils.copyProperties(productAddDTO, product);
        product.setShopId(BaseContextUtil.getCurrentShopId());

        // 插入数据SQL
        productMapper.add(product);
    }

    /**
     * 更新商品信息
     *
     */
    @Override
    public void update(ProductUpdateDTO productUpdateDTO) {
        productMapper.update(productUpdateDTO);
    }

    /**
     * 分页获取当前店铺的所有商品
     *
     * @return 商品列表
     */
    @Override
    public PageResult list(ProductQueryDTO productQueryDTO) {
        // 启动分页功能，传入 pageNum 和 pageSize
        PageHelper.startPage(productQueryDTO.getPageNum(), productQueryDTO.getPageSize());

        // 调用 MyBatis 的 Mapper 方法查询数据
        List<Product> products = productMapper.list(productQueryDTO);

        // 将查询结果封装到 PageResult 对象中
        PageInfo<Product> pageInfo = new PageInfo<>(products);
        return new PageResult(pageInfo.getTotal(), pageInfo.getList());
    }

    /**
     * 根据商品名获取商品信息
     *
     */
    @Override
    public PageResult getByName(String id, String productName) {
        Long shopId = Long.parseLong(id);
        Page<Product> products = productMapper.getByName(productName, shopId);
        return new PageResult(products.getTotal(), products.getResult());
    }

    /**
     * 根据商品id删除商品
     *
     */
    @Override
    public void delete(String productId) {
        productMapper.deleteById(Long.parseLong(productId));
    }

}
